iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 10
0
Kubernetes

Kubernetes~成為Devops工程師的必經試煉系列 第 10

Day 10 建立起你與 Pod的溝通橋樑 Service

  • 分享至 

  • xImage
  •  

前言

Kubernetes 的 Pod 有生命週期,使用 Replication Controllers 會動態的建立和銷毀 Pod (比如規模擴大或者縮小,或者執行動態更新)。由於這些 Pod 都由自己的ip,這些IP也隨著時間的變化也不能持續依賴。這樣就引發了一個問題:如果一些Pods(讓我們叫它作後台,後端)提供了一些功能供其它的Pod使用(讓我們叫作前台),該如何讓後台能夠存取位於前台 Pod 上的應用,而無需考慮到不同節點的問題呢?
Service 正是 Kubernetes 解決此問題的關鍵,因此接下來文章將會為各位介紹 Kubernetes Service 的概念。

實際操作

本篇教學會介紹3種不同的 Services連接方式,分別是 ClusterIP, NodePort 以及 LoadBalancer

  • ClusterIP: 讓Kubernetes Cluster中的其他服務,可以透過這個 ClusterIp 訪問到正在運行中的Pods.
  • NodePort: 讓在 Kubernetes Cluster 外但在同一個 Node 上的其他服務,可以透過這個 NodePort 訪問到 Kubernetes Cluster 內正在運行中的 Pods。
  • LoadBalancer: 我們可以透過 LoadBalancer ,幫我們分配流量到每個 Node.

在開始之前先查看你 local minikube有沒有 run 起來.

$ kubectl get nodes

之後,我們創建一個Deployment物件

$ kubectl run source-ip-app --image=k8s.gcr.io/echoserver:1.4
deployment.apps/source-ip-app created

確認Pod狀態都已經在Running

$ kubectl get pods
NAME                               READY     STATUS    RESTARTS   AGE 
source-ip-app-8687dbf9f-wrqrm      1/1       Running          0    4m

使用 ClusterIP

開始建立Service

$ kubectl expose deployment source-ip-app --name=clusterip --port=80 --target-port=8080
service/clusterip exposed
$ kubectl get svc clusterip
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
clusterip    ClusterIP   10.0.170.92   <none>        80/TCP    51s

之後在同個Pod 裡透過 busybox 連到該 Pod ,在 wget 後使用上面查詢查到的 CLUSTER-IP

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
40: eth0@if41: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:0e brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.14/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

# wget -qO - 10.0.170.92 
CLIENT VALUES:
client_address=172.17.0.14
command=GET
...

由上面例子可以得知,該 Service 的存取Ip 跟我們剛建立的 busybox 來源是同一個IP.

參考連結

  1. Kubernetes Service 概念詳解
  2. 名词解释 Services
  3. [Using Source IP

上一篇
DAY9 運行Kubernetes 的核心 ~ Node
下一篇
Day 11 用來儲存資料的元件 ~ Volume
系列文
Kubernetes~成為Devops工程師的必經試煉17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言